{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 音乐网站用户流失预测 -- test数据探索 & 特征工程\n",
    "\n",
    "### 数据集说明\n",
    "\n",
    "项目提供KKBOX用户——歌曲重复播放记录，以及用户和歌曲的元数据。训练数据由2017年2月服务到期的用户构成，target标签代表用户在2017年3月是否续订了业务。测试集中的数据由2017年3月内将到期的用户构成，需要预测用户是否在到期后的一个月内即2017年4月预定、流失的概率。\n",
    "\n",
    "以下是文件及字段说明：\n",
    "\n",
    "1. train.csv: 训练数据，共7,377,418条记录 \n",
    "\n",
    "    msno: 用户id，加密String\n",
    "\n",
    "    song_id: song id，歌曲id\n",
    "\n",
    "    source_system_tab: 触发事件的类型/tab，用于表示app的功能类型\n",
    "\n",
    "    source_screen_name: 用户看到的布局的名字（name of the layout）\n",
    "\n",
    "    source_type: 用户在app上播放音乐的入口的类型\n",
    "\n",
    "    target: 标签。1表示用户在第一次听音乐后会在一个月内继续订阅，0表示没有订阅。\n",
    "\n",
    "2. test.csv ：测试数据，共2,556,790条记录 \n",
    "\n",
    "    id: id (用于结果提交)\n",
    "\n",
    "    msno: 用户id\n",
    "\n",
    "    song_id: 歌曲id\n",
    "\n",
    "    source_system_tab: 触发事件的类型/tab，用于表示app的功能类型\n",
    "\n",
    "    source_screen_name: 用户看到的布局的名字（name of the layout）\n",
    "\n",
    "    source_type: 用户在app上播放音乐的入口的类型\n",
    "\n",
    "3. sampleSubmission.csv：提交结果文件样例 \n",
    "\n",
    "    提交测试结果包含两个字段，分别为测试样本id及其标签为1的概率，格式如下：\n",
    "\n",
    "    id,target\n",
    "    \n",
    "    2,0.3\n",
    "    \n",
    "    5,0.1\n",
    "    \n",
    "    6,1\n",
    "    \n",
    "    etc.\n",
    "\n",
    "4. songs.csv：歌曲元数据信息，用unicode编码 \n",
    "\n",
    "    song_id：歌曲id\n",
    "\n",
    "    song_length: 单位为ms\n",
    "\n",
    "    genre_ids: genre 类别. 可多选，用 “|“隔开\n",
    "\n",
    "    artist_name：歌手\n",
    "\n",
    "    composer：作曲\n",
    "\n",
    "    lyricist：作词\n",
    "\n",
    "    language：语言\n",
    "\n",
    "5. members.csv：用户元数据信息\n",
    "\n",
    "    msno：用户id\n",
    "\n",
    "    city：城市\n",
    "\n",
    "    bd: 年龄。注意：年龄数据有离群点\n",
    "\n",
    "    gender：性别\n",
    "\n",
    "    registered_via: 注册方式\n",
    "\n",
    "    registration_init_time: 注册时间，格式为%Y%m%d\n",
    "\n",
    "    expiration_date: 到期时间，格式为 %Y%m%d\n",
    "\n",
    "6. song_extra_infos.csv：歌曲额外的信息\n",
    "\n",
    "    song_id：歌曲id\n",
    "\n",
    "    song name ：歌曲名字\n",
    "\n",
    "    isrc – 国际标准音像制品编码(International Standard Recording Code )。理论上可用于歌曲id，但产生的ISR没有经过官方授权。因此ISRC中的信息，如国家代码和参考年份可能不正确。且多首歌曲可能共享共一个ISRC，因为一首歌曲的音像制可发行多次。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1、导入工具包"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "# 要注意的是一旦导入了seaborn，matplotlib的默认作图风格就会被覆盖成seaborn的格式\n",
    "import seaborn as sns\n",
    "\n",
    "# 矩阵完整显示\n",
    "np.set_printoptions(threshold=np.inf)\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2、test.csv数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_type</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=</td>\n",
       "      <td>my library</td>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>local-library</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>/uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=</td>\n",
       "      <td>8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=</td>\n",
       "      <td>discover</td>\n",
       "      <td>NaN</td>\n",
       "      <td>song-based-playlist</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=</td>\n",
       "      <td>radio</td>\n",
       "      <td>Radio</td>\n",
       "      <td>radio</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0   0  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "1   1  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "2   2  /uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=   \n",
       "3   3  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "4   4  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "\n",
       "                                        song_id source_system_tab  \\\n",
       "0  WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=        my library   \n",
       "1  y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=        my library   \n",
       "2  8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=          discover   \n",
       "3  ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=             radio   \n",
       "4  MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=             radio   \n",
       "\n",
       "    source_screen_name          source_type  \n",
       "0  Local playlist more        local-library  \n",
       "1  Local playlist more        local-library  \n",
       "2                  NaN  song-based-playlist  \n",
       "3                Radio                radio  \n",
       "4                Radio                radio  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "(2556790, 6)"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = '../data/'\n",
    "test = pd.read_csv(dpath +'test.csv')\n",
    "test.head()\n",
    "test.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 2556790 entries, 0 to 2556789\n",
      "Data columns (total 6 columns):\n",
      "id                    int64\n",
      "msno                  object\n",
      "song_id               object\n",
      "source_system_tab     object\n",
      "source_screen_name    object\n",
      "source_type           object\n",
      "dtypes: int64(1), object(5)\n",
      "memory usage: 117.0+ MB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1、查看每个特征的缺失值数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "id                         0\n",
       "msno                       0\n",
       "song_id                    0\n",
       "source_system_tab       8442\n",
       "source_screen_name    162883\n",
       "source_type             7297\n",
       "dtype: int64"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test.apply(lambda x: sum(x.isnull()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**下面先看看各个缺失特征的分布情况**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2、查看缺失的特征分布情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "source_system_tab属性有9种不同取值，各取值及其出现的次数\n",
      "\n",
      "my library      1019492\n",
      "discover         871068\n",
      "search           277615\n",
      "radio            212765\n",
      "listen with       98628\n",
      "explore           66023\n",
      "notification       2124\n",
      "settings            633\n",
      "Name: source_system_tab, dtype: int64\n",
      "\n",
      "source_screen_name属性有23种不同取值，各取值及其出现的次数\n",
      "\n",
      "Local playlist more     845115\n",
      "Online playlist more    529807\n",
      "Radio                   211201\n",
      "Album more              176129\n",
      "Search                  121982\n",
      "Artist more             110999\n",
      "Discover Feature         93401\n",
      "Others profile more      90457\n",
      "Discover Chart           78999\n",
      "Discover Genre           41617\n",
      "Explore                  27872\n",
      "My library               25559\n",
      "Unknown                  23620\n",
      "Discover New              5277\n",
      "Search Trends             4883\n",
      "Search Home               4705\n",
      "My library_Search         2114\n",
      "Self profile more          131\n",
      "People local                13\n",
      "Concert                     13\n",
      "Payment                     12\n",
      "People global                1\n",
      "Name: source_screen_name, dtype: int64\n",
      "\n",
      "source_type属性有13种不同取值，各取值及其出现的次数\n",
      "\n",
      "online-playlist           774532\n",
      "local-library             582346\n",
      "local-playlist            294537\n",
      "radio                     215164\n",
      "album                     195190\n",
      "top-hits-for-artist       179360\n",
      "song                      129153\n",
      "song-based-playlist        87179\n",
      "listen-with                84499\n",
      "topic-article-playlist      5082\n",
      "my-daily-playlist           2023\n",
      "artist                       428\n",
      "Name: source_type, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "cat_features = ['source_system_tab','source_screen_name','source_type']\n",
    "for col in cat_features:\n",
    "    num_vlaules = len(test[col].unique())\n",
    "    print('\\n%s属性有%d种不同取值，各取值及其出现的次数\\n'% (col,num_vlaules))\n",
    "    print(test[col].value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3、单个特征数据探索"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1、source_system_tab（触发事件的类型，表示app的功能类型）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1240624a8>"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Number of source_system_tab')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Number of occurrences')"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(15, 8))\n",
    "### Number of occurrences\n",
    "sns.countplot(test['source_system_tab'])\n",
    "plt.xlabel('Number of source_system_tab')\n",
    "plt.ylabel('Number of occurrences')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2、source_screen_name（用户看到的布局的名字）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1241717f0>"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Number of source_screen_name')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Number of occurrences')"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(15, 8))\n",
    "### Number of occurrences\n",
    "sns.countplot(test['source_screen_name'])\n",
    "plt.xlabel('Number of source_screen_name')\n",
    "plt.ylabel('Number of occurrences')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3、source_type（用户在app上播放音乐的入口的类型）特征分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x132b88908>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0.5, 0, 'Number of source_type')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'Number of occurrences')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(15, 8))\n",
    "### Number of occurrences\n",
    "sns.countplot(test['source_type'])\n",
    "plt.xlabel('Number of source_type')\n",
    "plt.ylabel('Number of occurrences')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4、对以上3个特征分别新增一列，表示是否有缺失值\n",
    "\n",
    "**由于上面3个特征的缺失值比较多，所以各新增一列，表示是否有缺失值**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source_system_tab</th>\n",
       "      <th>source_system_tab_missing</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>my library</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>my library</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>discover</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>my library</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>my library</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  source_system_tab  source_system_tab_missing\n",
       "0        my library                          0\n",
       "1        my library                          0\n",
       "2          discover                          0\n",
       "3             radio                          0\n",
       "4             radio                          0\n",
       "5             radio                          0\n",
       "6             radio                          0\n",
       "7        my library                          0\n",
       "8             radio                          0\n",
       "9        my library                          0"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看source_system_tab,source_screen_name,source_type有多少种组合\n",
    "# df_train_groupby = train.groupby(['source_system_tab','source_screen_name','source_type'])['target'].size().reset_index(name='count')\n",
    "# df_train_groupby[\"source\"] = df_train_groupby['source_system_tab'] + \"|\" + df_train_groupby['source_screen_name']  + \"|\" + df_train_groupby['source_type']\n",
    "\n",
    "test['source_system_tab_missing'] = test['source_system_tab'].apply(lambda x: 1 if pd.isnull(x) else 0)\n",
    "test[['source_system_tab','source_system_tab_missing']].head(10)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x124686940>"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(x=\"source_system_tab_missing\", data=test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source_screen_name</th>\n",
       "      <th>source_screen_name_missing</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>Radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>Radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>Radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>Local playlist more</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    source_screen_name  source_screen_name_missing\n",
       "0  Local playlist more                           0\n",
       "1  Local playlist more                           0\n",
       "2                  NaN                           1\n",
       "3                Radio                           0\n",
       "4                Radio                           0\n",
       "5                Radio                           0\n",
       "6                Radio                           0\n",
       "7  Local playlist more                           0\n",
       "8                Radio                           0\n",
       "9  Local playlist more                           0"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test['source_screen_name_missing'] = test['source_screen_name'].apply(lambda x: 1 if pd.isnull(x) else 0)\n",
    "test[['source_screen_name','source_screen_name_missing']].head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x12484bd68>"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(x=\"source_screen_name_missing\",data=test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>source_type</th>\n",
       "      <th>source_type_missing</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>local-library</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>local-library</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>song-based-playlist</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>local-playlist</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>radio</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>local-library</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           source_type  source_type_missing\n",
       "0        local-library                    0\n",
       "1        local-library                    0\n",
       "2  song-based-playlist                    0\n",
       "3                radio                    0\n",
       "4                radio                    0\n",
       "5                radio                    0\n",
       "6                radio                    0\n",
       "7       local-playlist                    0\n",
       "8                radio                    0\n",
       "9        local-library                    0"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test['source_type_missing'] = test['source_type'].apply(lambda x: 1 if pd.isnull(x) else 0)\n",
    "test[['source_type','source_type_missing']].head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x124dca3c8>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(x=\"source_type_missing\", data=test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**以上3各特征缺失的数据中，正负样本比例差不多各占一半**"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5、保存特征到新文件"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 把上面的特征工程合并在一起\n",
    "fe_test_data = pd.concat([test['id'], test['msno'], test['song_id'], test['source_system_tab_missing'], \n",
    "                           test['source_screen_name_missing'], test['source_type_missing']], \n",
    "                          axis = 1, ignore_index=False)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>msno</th>\n",
       "      <th>song_id</th>\n",
       "      <th>source_system_tab_missing</th>\n",
       "      <th>source_screen_name_missing</th>\n",
       "      <th>source_type_missing</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=</td>\n",
       "      <td>y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>/uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=</td>\n",
       "      <td>8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=</td>\n",
       "      <td>MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id                                          msno  \\\n",
       "0   0  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "1   1  V8ruy7SGk7tDm3zA51DPpn6qutt+vmKMBKa21dp54uM=   \n",
       "2   2  /uQAlrAkaczV+nWCd2sPF2ekvXPRipV7q0l+gbLuxjw=   \n",
       "3   3  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "4   4  1a6oo/iXKatxQx4eS9zTVD+KlSVaAFbTIqVvwLC1Y0k=   \n",
       "\n",
       "                                        song_id  source_system_tab_missing  \\\n",
       "0  WmHKgKMlp1lQMecNdNvDMkvIycZYHnFwDT72I5sIssc=                          0   \n",
       "1  y/rsZ9DC7FwK5F2PK2D5mj+aOBUJAjuu3dZ14NgE0vM=                          0   \n",
       "2  8eZLFOdGVdXBSqoAv5nsLigeH2BvKXzTQYtUM53I0k4=                          0   \n",
       "3  ztCf8thYsS4YN3GcIL/bvoxLm/T5mYBVKOO4C9NiVfQ=                          0   \n",
       "4  MKVMpslKcQhMaFEgcEQhEfi5+RZhMYlU3eRDpySrH8Y=                          0   \n",
       "\n",
       "   source_screen_name_missing  source_type_missing  \n",
       "0                           0                    0  \n",
       "1                           0                    0  \n",
       "2                           1                    0  \n",
       "3                           0                    0  \n",
       "4                           0                    0  "
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fe_test_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "id                            0\n",
       "msno                          0\n",
       "song_id                       0\n",
       "source_system_tab_missing     0\n",
       "source_screen_name_missing    0\n",
       "source_type_missing           0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "fe_test_data.apply(lambda x: sum(x.isnull()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**所有特征缺失值均已处理，将结果保存到新的文件中**"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 保存结果到文件\n",
    "fe_test_data.to_csv(dpath + 'LR_data/FE_Test.csv', index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
